package com.company;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.stream.Collectors;

/**
 * List去重的几种实现方式
 *
 */
public class Duplication {
    public static void main(String[] args){
        //IteratorRemove();
        HashSetRemove();
        List<String> list = new ArrayList<>();
        list.add("a");
        list.add("b");
        list.add("c");
        list.add("a");
        list.add("a");
        System.out.println(delRepeat(list));
        System.out.println(delStream(list));
    }

    private static List<String> IteratorRemove(){
        List<String> list = new ArrayList<>();
        list.add("a");
        list.add("b");
        list.add("c");
        list.add("a");
        list.add("a");

        //利用迭代器遍历集合
        Iterator it = list.iterator();
        while(it.hasNext()) {
            System.out.print(it.next());
        }
        return  list;
    }

    private static List<String> HashSetRemove(){
        List<String> list = new ArrayList<>();
        list.add("a");
        list.add("b");
        list.add("c");
        list.add("a");
        list.add("a");

        // 利用list中的元素创建HashSet集合，此时set中进行了去重操作
        HashSet set = new HashSet(list);
        // 清空list集合
        list.clear();
        // 将去重后的元素重新添加到list中
        list.addAll(set);
        //利用迭代器遍历集合
        Iterator it = list.iterator();
        while(it.hasNext()) {
            System.out.println(it.next());
        }
        return list;
    }

    /**
     * 遍历List集合,将元素添加到另一个List集合中
     * @param list
     * @return
     */
    public static List<String> delRepeat(List<String> list) {
        List<String> listNew = new ArrayList<String>();
        for (String str : list) {
            if (!listNew.contains(str)) {
                listNew.add(str);
            }
        }
        return listNew ;
    }

    /**
     * 使用Java8特性去重
     * @param list
     * @return
     */
    public static List<String> delStream(List<String> list) {
        List<String> myList = list.stream().distinct().collect(Collectors.toList());
        return myList ;
    }


}
